#!/bin/bash

# SmartInput 浏览器插件打包脚本
# 用于生成发布版本的Chrome扩展

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 项目信息
PROJECT_NAME="SmartInput"
VERSION="3.0.0"
BUILD_DIR="dist"
EXTENSION_DIR="."

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查依赖
check_dependencies() {
    log_info "检查打包依赖..."
    
    # 检查必要的命令
    local missing_deps=()
    
    if ! command -v zip &> /dev/null; then
        missing_deps+=("zip")
    fi
    
    if [ ${#missing_deps[@]} -ne 0 ]; then
        log_error "缺少必要的依赖: ${missing_deps[*]}"
        log_info "请安装缺少的依赖后重试"
        exit 1
    fi
    
    log_success "依赖检查完成"
}

# 清理构建目录
clean_build_dir() {
    log_info "清理构建目录..."
    
    if [ -d "$BUILD_DIR" ]; then
        rm -rf "$BUILD_DIR"
        log_info "已删除旧的构建目录"
    fi
    
    mkdir -p "$BUILD_DIR"
    log_success "构建目录已创建"
}

# 验证扩展文件
validate_extension() {
    log_info "验证扩展文件..."
    
    # 检查必要的文件
    local required_files=(
        "manifest.json"
        "background.js"
        "content.js"
        "content.css"
        "popup.html"
        "popup.css"
        "popup.js"
        "options.html"
        "options.css"
        "options.js"
        "config.js"
        "README.md"
    )
    
    local missing_files=()
    
    for file in "${required_files[@]}"; do
        if [ ! -f "$EXTENSION_DIR/$file" ]; then
            missing_files+=("$file")
        fi
    done
    
    # 检查图标目录
    if [ ! -d "$EXTENSION_DIR/icons" ]; then
        missing_files+=("icons/")
    else
        local required_icons=("icon16.png" "icon32.png" "icon48.png" "icon128.png")
        for icon in "${required_icons[@]}"; do
            if [ ! -f "$EXTENSION_DIR/icons/$icon" ]; then
                missing_files+=("icons/$icon")
            fi
        done
    fi
    
    if [ ${#missing_files[@]} -ne 0 ]; then
        log_error "缺少必要的文件:"
        for file in "${missing_files[@]}"; do
            echo "  - $file"
        done
        exit 1
    fi
    
    log_success "文件验证完成"
}

# 复制文件到构建目录
copy_files() {
    log_info "复制文件到构建目录..."
    
    # 复制核心文件，排除构建目录本身
    find "$EXTENSION_DIR" -maxdepth 1 -not -name "$BUILD_DIR" -not -name "." -not -name ".." -exec cp -r {} "$BUILD_DIR/" \;
    
    # 删除不需要的文件（使用子shell避免改变主脚本的工作目录）
    (cd "$BUILD_DIR" && rm -f package.sh *.sh test-*.html *.md)
    
    log_success "文件复制完成"
}

# 创建ZIP包
create_zip() {
    log_info "创建ZIP包..."
    
    cd "$BUILD_DIR"
    local zip_name="${PROJECT_NAME}-v${VERSION}.zip"
    
    zip -r "../$zip_name" . -x "*.DS_Store" "Thumbs.db" "*.tmp"
    
    cd ..
    log_success "ZIP包创建完成: $zip_name"
}

# 显示打包结果
show_result() {
    log_success "打包完成！"
    echo ""
    echo "📦 打包结果:"
    echo "   - 构建目录: $BUILD_DIR/"
    echo "   - ZIP包: ${PROJECT_NAME}-v${VERSION}.zip"
    echo ""
    echo "🚀 发布步骤:"
    echo "   1. 在Chrome扩展管理页面加载 $BUILD_DIR/ 目录"
    echo "   2. 点击'打包扩展程序'生成 .crx 文件"
    echo "   3. 保存生成的 .pem 私钥文件"
    echo "   4. 将 .crx 文件分发给用户"
    echo ""
    echo "⚠️  注意事项:"
    echo "   - 私钥文件(.pem)用于后续更新，请妥善保管"
    echo "   - 不要将私钥文件分发给用户"
    echo "   - 更新扩展时需要使用相同的私钥"
}

# 主函数
main() {
    echo "=== SmartInput 浏览器插件打包工具 ==="
    echo "版本: $VERSION"
    echo ""
    
    check_dependencies
    clean_build_dir
    validate_extension
    copy_files
    create_zip
    show_result
}

# 运行主函数
main "$@"
